package dao;

import bean.Student;
import bean.Student02;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

public interface StudentDao {
    /**
     * 查找所有学生
     *
     * @return 放回list集合包含所有Student对象
     * 使用#填充占位符，使用$进行order by 排序时替换列名
     */
    List<Student> queryStudents(@Param("colName") String colName);

    /**
     * 插入一个学生的信息
     * @param student
     * @return 返回影响数据库的行数,插入一行代表数据库表中增加了一条数据
     */
    int insertStudent(Student student);

    List<Student> queryStudentByIdAndName(@Param("name") String name, @Param("id") Integer id, @Param("colName") String colName);

    /**
     * 统计学生的数量
     * @return 返回学生的总数量
     */
    int countStudent();

    /**
     * 定义接口方法参数为map集合
     */
    List<Student> queryStudentParamMap(Map<String,Object> map);

    /**
     * 使用resultMap定义SQL语句与Java对象的映射关系
     * 解决java属性名与数据库表中的列名不一致的第一种方式
     * 第二种方式使用SQL语句定义别名
     */
    List<Student02> queryAllStudents();

    /**
     * 推荐使用的模糊查询(like)的方式,在java代码中指定需要查询的内容，拼接好字符串
     */
    List<Student> queryStudentsLike(String name);

    List<Student> queryStudentByIfAndWhere(@Param("name") String name,@Param("age") Integer age);

    /**
     * foreach的用法1： List<Integer>
     */
    List<Student> queryForeachInteger(List<Integer> idList);

    /**
     * foreach的用法2： List<对象类型(Student)>
     * 对象.属性值
     */
    List<Student> queryForeachObject(List<Student> stuList);

    /**
     * PageHelper分页的测试
     */
    List<Student> pageHelperTest();
}
